#ifndef PROJECTOPTIONSDLG_H
#define PROJECTOPTIONSDLG_H

#include "scrollingdialog.h"

class wxTreeEvent;
class wxSpinEvent;
class M_Code_Project;
class cbCompilerPlugin;

class ProjectOptionsDlg : public wxScrollingDialog {
  public:
    ProjectOptionsDlg( wxWindow* parent, M_Code_Project* project );
    ~ProjectOptionsDlg();
    void EndModal( int retCode );
    void OnFileOptionsClick( wxCommandEvent& event );
    void OnFileToggleMarkClick( wxCommandEvent& event );
    void OnFileMarkOnClick( wxCommandEvent& event );
    void OnFileMarkOffClick( wxCommandEvent& event );
    void OnProjectTypeChanged( wxCommandEvent& event );
    void OnBuildTargetChanged( wxCommandEvent& event );
    void OnAddBuildTargetClick( wxCommandEvent& event );
    void OnEditBuildTargetClick( wxCommandEvent& event );
    void OnCopyBuildTargetClick( wxCommandEvent& event );
    void OnRemoveBuildTargetClick( wxCommandEvent& event );
    void OnBrowseOutputFilenameClick( wxCommandEvent& event );
    void OnBrowseImportLibraryFilenameClick( wxCommandEvent& event );
    void OnBrowseDefinitionFileFilenameClick( wxCommandEvent& event );
    void OnBrowseDirClick( wxCommandEvent& event );
    void OnVirtualTargets( wxCommandEvent& event );
    void OnEditDepsClick( wxCommandEvent& event );
    void OnExportTargetClick( wxCommandEvent& event );
    void OnBuildOrderClick( wxCommandEvent& event );
    void OnProjectBuildOptionsClick( wxCommandEvent& event );
    void OnProjectDepsClick( wxCommandEvent& event );
    void OnTargetBuildOptionsClick( wxCommandEvent& event );
    void OnUpdateUI( wxUpdateUIEvent& event );
    void OnOK( wxCommandEvent& event );
    void OnCreateDefFileClick( wxCommandEvent& event );
    void OnCreateImportFileClick( wxCommandEvent& event );
    void OnKeyDown( wxKeyEvent& event );
    void OnScriptsOverviewSelChanged( wxTreeEvent& event );
    void OnCheckScripts( wxCommandEvent& event );
    void OnAddScript( wxCommandEvent& event );
    void OnRemoveScript( wxCommandEvent& event );
    void OnScriptMoveUp( wxSpinEvent& event );
    void OnScriptMoveDown( wxSpinEvent& event );
  private:
    void BuildScriptsTree();
    void AddPluginPanels();
    void FillScripts();
    void FillBuildTargets();
    void DoTargetChange( bool saveOld = true );
    void DoBeforeTargetChange( bool force = false );
    bool DoCheckScripts( CompileTargetBase* base );
    bool IsScriptValid( ProjectBuildTarget* target, const wxString& script );
    bool ValidateTargetName( const wxString& name );
    void UpdateTargetControls();
    M_Code_Project* m_Project;
    int m_Current_Sel;
    bool xml_File_lock;
    cbCompilerPlugin* m_pCompiler;
    ConfigurationPanelsArray m_PluginPanels;
    DECLARE_EVENT_TABLE()
};

#endif
